## 编码辅助类
class_name EncodingHelper

#region const
## UTF8的BOM（EFBBBF），常省略
static var UTF8_BOM: PackedByteArray = PackedByteArray([0xEF, 0xBB, 0xBF])
## UTF16的BOM-大端结尾（FEFF）
static var UTF16BE_BOM: PackedByteArray = PackedByteArray([0xFE, 0xFF])
## UTF16的BOM-小端结尾（FFFE）
static var UTF16LE_BOM: PackedByteArray = PackedByteArray([0xFF, 0xFE])
## UTF32的BOM-大端结尾（0000FEFF）
static var UTF32BE_BOM: PackedByteArray = PackedByteArray([0x00, 0x00, 0xFE, 0xFF])
## UTF32的BOM-小端结尾（FFFE0000）
static var UTF32LE_BOM: PackedByteArray = PackedByteArray([0xFF, 0xFE, 0x00, 0x00])
## GB-18030的BOM（84319533）
static var GB18030_BOM: PackedByteArray = PackedByteArray([0x84, 0x31, 0x95, 0x33])
#endregion const

#region enum
## 字符编码
enum Encoding
{
	UNKNOWN = 0,
	ANSI = 1,
	UTF8 = 2,
	UTF16 = 3,
	UTF32 = 4,
	GB18030 = 5,
}
#endregion enum

#region GetEncoding
## 根据BOM获取字节数组的字符编码
## 参数：
## buffer-字节数组
## 返回：字符编码。
static func GetEncoding(buffer: PackedByteArray) -> Encoding:
	var size: int =  buffer.size() if buffer else 0
	if size == 0:
		return Encoding.UNKNOWN
	if ArrayUtility.StartsWith(buffer, UTF32BE_BOM) or ArrayUtility.StartsWith(buffer, UTF32LE_BOM):
		return Encoding.UTF32
	elif ArrayUtility.StartsWith(buffer, UTF16BE_BOM) or ArrayUtility.StartsWith(buffer, UTF16LE_BOM):
		return Encoding.UTF16
	elif ArrayUtility.StartsWith(buffer, UTF8_BOM):
		return Encoding.UTF8
	elif ArrayUtility.StartsWith(buffer, GB18030_BOM):
		return Encoding.GB18030
	return Encoding.UNKNOWN
#endregion GetEncoding
